99장. 운영 체크리스트 — 보안 · 비용 · 관측성
이 장에서 말하고자 하는 것
지금까지 본 부품들을 운영에 올리기 직전 점검 목록이다.
세 가지 축으로 정리한다.
- 보안
- 비용
- 관측성
각 항목은 책의 어느 장에서 다뤘는지도 함께 표시했다.
1. 보안 — 외부 노출
□ Route 53 ALIAS 로만 AWS 자원 가리키기 (30)
□ ACM 인증서: CloudFront는 us-east-1, ALB는 그 리전 (32)
□ 80 → 443 리다이렉트 켜져 있음 (31)
□ CloudFront 앞단에 WAF (Managed Rules + Rate-based) (40)
□ ALB 는 인터넷에 직접 노출되지 않음 (Private) (52, 54)
□ S3 버킷 Public Access Block ON (56)
□ 공개 S3 자원은 CloudFront + OAC 로만 (39)
□ HTTP 호출이 CloudFront 시크릿 헤더를 거쳐 ALB로 (39)
2. 보안 — 네트워크
□ Task는 프라이빗 서브넷 (28, 51)
□ NAT Gateway + VPC Endpoint (S3·ECR·Logs·SSM·Secrets) (88)
□ 보안 그룹: ALB ← 인터넷 443 / Task ← ALB / DB ← Task (26, 47)
□ NACL은 기본 그대로 (SG가 주된 통제) (27)
□ Multi-AZ로 ALB · ECS · RDS 구성 (24, 63)
3. 보안 — 권한 · 비밀
□ 루트 계정 MFA, 일상 사용 금지 (78)
□ 사람 사용자에게 MFA 강제 (78)
□ 머신은 항상 Role (User 키 사용 금지) (79)
□ ECS Execution Role / Task Role 분리 (79)
□ 서비스마다 별도 Task Role (79, 80)
□ Task Role 권한: Action · Resource 모두 좁게 (80)
□ KMS Customer Managed Key 도입 + 자동 회전 (81)
□ S3 SSE-KMS + Bucket Keys (81)
□ 비밀은 Secrets Manager / Parameter Store (SecureString) (82)
□ Task Definition의 secrets 필드로 주입 (평문 환경 X) (45, 82)
□ Git/로그에 비밀 안 들어가게 (82, 84)
□ CI 인증은 OIDC (액세스 키 안 박음) (79, 94)
4. 보안 — 감사 · 탐지
□ CloudTrail Multi-Region · Log Validation · Object Lock (87)
□ 변경에 민감한 이벤트는 알람 (IAM 변경 · SG 변경 · 삭제) (87)
□ GuardDuty · Security Hub 활성화 (87)
□ AWS Config 핵심 자원 추적 (87)
□ WAF 로그 수집 + 알람 (40)
5. 비용 — 컴퓨트
□ Fargate 시작은 On-Demand, 안정 후 Spot 혼합 (46)
□ ECS Service Auto Scaling Target Tracking (37)
□ Max를 너무 크게 잡지 않기 (비용 사고 방지) (37)
□ ALB 한 대로 여러 서비스 (TG 분리) (33, 35)
□ Sticky Session은 꼭 필요할 때만 (34, 37)
6. 비용 — 데이터
□ S3 수명 주기: Standard → IA → Glacier → 삭제 (57)
□ versioning + 옛 버전 수명 주기 함께 (56, 57)
□ S3 SSE-KMS 는 Bucket Keys 켜기 (81)
□ DynamoDB On-Demand 시작 → 안정 후 Provisioned + Auto (68)
□ DynamoDB TTL 켜기 (세션·이벤트) (68)
□ RDS Multi-AZ는 켜되 dev는 끄기 (63)
□ ECR 수명 주기 (오래된 이미지 정리) (43)
□ CloudWatch Logs retention 명시 (30~90일 표준) (84)
7. 비용 — 네트워크
□ S3 · DynamoDB는 Gateway Endpoint로 NAT 우회 (88)
□ ECR · Logs · SSM · Secrets · KMS Interface Endpoint (88)
□ CloudFront로 정적 트래픽 흡수 (38, 59)
□ CloudFront Cache Hit Ratio 알람 (38)
□ CloudFront WAF 호출 비용 점검 (40)
8. 관측성 — 메트릭 · 알람
□ 서비스마다 대시보드: RequestCount · p95/p99 · 5xx · CPU (83)
□ DB: CPU · Connections · ReplicaLag · Throttle (62~64, 68)
□ SQS: 메시지 깊이 · 오래된 메시지 · DLQ (74)
□ 알람 등급 분리 (Slack vs Page) (83)
□ 알람마다 Runbook 링크 (83)
9. 관측성 — 로그 · 트레이스
□ 모든 로그 JSON 한 줄 (84, 85)
□ 모든 로그에 trace_id · request_id · user_id (86)
□ 비밀 · PII 마스킹 (로깅 라이브러리에서) (84)
□ FireLens 또는 awslogs (서비스 특성에 맞게) (85)
□ 분산 트레이싱 (X-Ray 또는 OpenTelemetry ADOT) (86)
□ ALB · CloudFront · WAF 액세스 로그 S3 (84)
10. 복구 · DR
□ AWS Backup Plan 매일 (RDS·DynamoDB·EFS 등 통합) (71)
□ RDS PITR 활성 (보관 7~30일) (62)
□ DynamoDB PITR 활성 (66)
□ Vault Lock 또는 별도 계정 백업 복제 (71)
□ 정기 복구 시뮬레이션 (분기마다) (71)
□ 핵심 서비스 페일오버 시험 (63)
□ Cross-Region 백업 (필요 시) (71)
11. CI/CD
□ 이미지 태그는 sha-{commit} · 불변 (43, 94)
□ ECR 스캔 결과로 배포 차단 (CRITICAL) (43, 94)
□ CI 인증은 OIDC + IAM Role (94)
□ ECS Service deployment_circuit_breaker + rollback (47)
□ 핵심 서비스는 Blue-Green (CodeDeploy) (49, 95, 96)
□ Terraform Plan 결과 PR 코멘트, 머지 시 Apply (93, 95)
□ DB 스키마 변경은 3-Phase (96)
12. 처음 환경 만들 때 — 추천 순서
1. AWS 계정 분리 (Organizations · prod/stage/dev)
2. Identity 베이스라인 (IAM 정책 · SCP · MFA · 루트 잠금)
3. CloudTrail · Config · GuardDuty 켜기
4. KMS 키 / Secrets Manager 도입
5. VPC + 서브넷 + Endpoint 만들기
6. ALB + ACM + Route 53
7. ECR · ECS Cluster + 첫 서비스
8. RDS / DynamoDB / ElastiCache
9. CloudFront + WAF + API Gateway
10. CI/CD (OIDC) + IaC (Terraform)
11. CloudWatch 대시보드 · 알람 · X-Ray
12. AWS Backup · 복구 시뮬레이션
13. SLO · SLI — 운영의 약속
운영을 더 단단히 하려면 측정 가능한 약속을 만든다.
SLI (지표) SLO (목표)
응답 성공률 99.9% / 30일
p95 지연 500ms 이하
주문 처리 성공률 99.95%
알람과 배포 차단 모두 이 숫자 기반으로 설계한다.
“느낌” 으로 운영하지 않고 “약속한 숫자” 로 운영한다
14. 한 줄로 정리
운영은 한 번에 끝나지 않는다 — 분기마다 이 체크리스트를 다시 본다
보안 · 비용 · 관측성 세 축의 균형이 곧 운영 품질이다
15. 이 장의 핵심 정리
- 운영 점검은 보안 · 비용 · 관측성 세 축으로 본다.
- 각 항목은 책의 어느 장과 연결돼 있다 — 잊었다면 그 장으로 돌아간다.
- 처음 환경은 12단계로 차근차근 올린다.
- SLO 가 있어야 알람과 배포 차단이 “느낌” 이 아닌 약속이 된다.
- 체크리스트는 분기마다 재검토한다.
- 한 번도 안 일어난 시나리오는 일어난 적이 없는 게 아니라 아직 안 일어났을 뿐.